package com.linkgie.galaxyframework.module;

import java.io.Closeable;
import java.io.IOException;

/**
 * 模块接口；
 * <p>
 * 
 * 模块管理器通过模块工厂
 * {@link ModuleFactory#createModule(com.linkgie.galaxyframework.context.HomeContext)}
 * 创建一个模块实例； <br>
 * 
 * @author spring
 *
 */
public interface Module extends Closeable {

	/**
	 * 模块名称；
	 * 
	 * @return
	 */
	String getName();

	/**
	 * 返回由模块管理的组件；<p>
	 * 
	 * 如果组件不存在，则返回 null；
	 * 
	 * @param <T>
	 * @param componentType 组件类型；
	 * @return
	 */
	<T> T getComponent(Class<T> componentType);

	/**
	 * 关闭模块；
	 * <p>
	 * 
	 * 在应用退出之前会调用此方法用于执行模块清理操作；
	 */
	@Override
	void close() throws IOException;
}
